cssnode: Don't put wrong styles in the style cache
authorBenjamin Otte <otte@redhat.com>
Tue, 10 Oct 2017 19:00:46 +0000 (21:00 +0200)
committerTimm Bäder <mail@baedert.org>
Tue, 10 Oct 2017 19:45:18 +0000 (21:45 +0200)
~Company ╡ so TL;DR: we put the static style in the cache, but then
       ⤷ ╡ compute a child style from the animated style in the cache
       ⤷ ╡ and we put the child style also in the cache (because
       ⤷ ╡ it's not animated)
       ⤷ ╡ then we run the animation, but reuse the cache every time
       ⤷ ╡ for both child and parent
       ⤷ ╡ so after the animation is done, we end up with a cache that
       ⤷ ╡ has the correct static style for the parent but an
       ⤷ ╡ incorrect static style for the child
       ⤷ ╡ because that static style was computed from the
       ⤷ ╡ initial animated style

This fixes https://bugzilla.gnome.org/show_bug.cgi?id=763517

gtk/gtkcssnode.c

index 46ed213cb894a1acf02e12d37dceebae1c26d897..94139cd51028b2ef270c40834b98275390cba05c 100644 (file)
@@ -434,6 +434,10 @@ gtk_css_node_real_update_style (GtkCssNode   *cssnode,
                                               timestamp,
                                               gtk_css_node_get_style_provider (cssnode),
                                               should_create_transitions (change) ? style : NULL);
+
+      /* Clear the cache again, the static style we looked up above
+       * may have populated it. */
+      g_clear_pointer (&cssnode->cache, gtk_css_node_style_cache_unref);
     }
   else if (static_style != style && (change & GTK_CSS_CHANGE_TIMESTAMP))
     {